﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidades;
using System.Transactions;

namespace LogicaDeNegocio
{
    public class TecnicoBL
    {
        private BaseDeDatosEntities modeloEntidades;
        public BaseDeDatosEntities ModeloEntidades
        {
            get
            {
                if (modeloEntidades == null)
                    return modeloEntidades = new BaseDeDatosEntities();
                else
                    return modeloEntidades;
            }
        }

        public TecnicoBL()
        {
        }
        
        public List<Tecnico> ObtenerTecnicos()
        {
            var tecnicos = ModeloEntidades.Tecnico;
            return tecnicos.ToList();
        }

        public Tecnico ObtenerTecnico(int nroEmp)
        {
            var tecnico = ModeloEntidades.Tecnico.Where(u => u.NroEmpleado == nroEmp).FirstOrDefault();
            return tecnico;
        }

 
        public List<Datos> ObtenerTecnicosMenosOcupados()
        {

            var tecnicos = from t in ModeloEntidades.Tecnico
                           join p in ModeloEntidades.Pedido on t.NroEmpleado equals p.Tecnico.NroEmpleado
                           join dp in ModeloEntidades.DetallePedido on p.idPedido equals dp.idPedido
                           where dp.EstadoDelPedido != "Terminada"
                           group t by new { t.NroEmpleado, t.Nombre, t.Apellido } into g
                           orderby g.Count()
                           select new Datos() { NroEmp = g.Key.NroEmpleado, Nombre = g.Key.Nombre, Apellido = g.Key.Apellido, Cantidad = g.Count() };              

            return tecnicos.ToList();
        }

        public class Datos
        {
            //Declaración de atributos
            private int nroEmp;
            private string nombre;
            private string apellido;
            private int cantidad;

            //Declaración de propiedades
            public int NroEmp
            {
                get { return nroEmp; }
                set { nroEmp = value; }
            }

            public string Nombre
            {
                get { return nombre; }
                set { nombre = value; }
            }

            public string Apellido
            {
                get { return apellido; }
                set { apellido = value; }
            }

            public int Cantidad
            {
                get { return cantidad; }
                set { cantidad = value; }
            }

            //Constructor de la clase

            public Datos()
            {
            } 

            public Datos(int numeroEmp, string nom, string apellIdo, int cant)
            {
                NroEmp = numeroEmp;
                Nombre = nom;
                Apellido = apellIdo;
                Cantidad = cant;
            }
        }
    }
}
